/**
 * @fileoverview 基于jQuery的表格固定表头和列插件
 * @author  Fengwp 360buy UED
 * @version 2.0 2012-1-9
 * @example
 * $('.fixedTable').tableFixed({
		w:1100,
		colLW:50,
		colRW:200
	});
 */
/*global jQuery:true */
(function($) {
	$.fn.tableFixed= function(options) {
		options = options || {};
		return $(this).each(function(i){
			/*------参数传递------*/
			var state = $.data(this, 'select');
			var opts;
			if (state) {
				opts = $.extend(state.options, options);
				state.options = opts;
			} else {
				opts = $.extend({}, $.fn.tableFixed.defaults, {
					w:$(this).width()
				}, options);
				$.data(this, 'select', {
					options: opts
				});
			}
			/*------变量声明初始化------*/
			var $self=$(this),
			h=0,
			theadTrH=0,
			$colL = $('.fixedColsL',this),
			$conM = $('.scrollCon',this),
			$colR = $('.fixedColsR',this),
			trNum = $conM.find('tbody tr').length;
			
			/*------表格高宽的一致------*/
			var theadTds = $conM.find('.fixedThead thead tr:first td');
			var tbodyTds = $conM.find('.scrollTbody tbody tr:first td');
			if(theadTds.length==tbodyTds.length)
			for(var i = 0;i<tbodyTds.length;i++){
				var _w = $(theadTds[i]).width()>$(tbodyTds[i]).width()?$(theadTds[i]).width():$(tbodyTds[i]).width();
				$(theadTds[i]).width(_w);
				$(tbodyTds[i]).width(_w);
			}
			for(var i = 0;i<trNum;i++){
				var _h = $($conM.find('tbody tr')[i]).height();
				$($colL.find('tbody tr')[i]).height(_h);
				$($colR.find('tbody tr')[i]).height(_h);
				
				if(i<opts.num) h+=_h;
			}
			var _mTheadW = $conM.find('.fixedThead thead tr').height();
			$colL.find('.fixedThead thead tr').height(_mTheadW);
			$colR.find('.fixedThead thead tr').height(_mTheadW);
			theadTrH = $('thead tr:first',this).height();
			
			if(trNum>opts.num){//垂直滚动条出现
				var $sIdiv = $self.find('.scrollTbody'),
				sOh=h,
				sIh=$self.find('.scrollTbody table').height(),
				fakeScroll = '<div class="fakeScrollY" style="height:'+
				sOh+'px;"><div class="fakeScrollYCon" style="height:'+
				sIh+'px;"></div></div>';
				$self.find('.scrollTbody').height(sOh+1);
				/*------插入模拟垂直滚动条------*/
				var $sOdiv = $self.find('.fakeScrollY');
				if(!$sOdiv.length){
					$self.append(fakeScroll);
					var $sOdiv = $self.find('.fakeScrollY');
					/*------绑定滚动事件------*/
					$sOdiv.bind('scroll', function() {
						if($sIdiv.scrollTop()!=$(this).scrollTop())
							$sIdiv.scrollTop($(this).scrollTop());
					});
					$sIdiv.bind('scroll', function() {
						if($sOdiv.scrollTop()!=$(this).scrollTop()){
							$sOdiv.scrollTop($(this).scrollTop());
							$sIdiv.scrollTop($(this).scrollTop());
						}
					});
					$sOdiv.css({
						"right":(0+$colL.length+$colR.length)
					});
				}
				else{
					$sOdiv.height(sOh).find('.fakeScrollYCon').height(sIh);
				}
			}
			else $self.find('.fakeScrollY').remove();
			
			/*------格式化表格------*/
			$self.width(opts.w-$colL.length-$colR.length);
			$conM.width(opts.w-opts.colLW-opts.colRW);
			$colL.width(opts.colLW);
			$colR.width(opts.colRW);
			if(!$colL.length)
			$colR.css({
					"right":0
				});
			$conM.css({
				"width":opts.w-$colL.width()-$colR.width(),
				"margin-left":($colL.width()-$colL.length)
			});
			var trueNum = trNum>opts.num?opts.num:trNum;
			if($conM.width()<$conM.find('.scrollTbody').width()){
					h = (theadTrH+h+17);
				}
			else {
				h = (theadTrH+h+1);
				if($sOdiv)
				$sOdiv.css({
					"bottom":0
				});
			}
			$conM.css({
				"height":h
			});
			$colL.height(h);
			$colR.height(h);
			if(trNum>opts.num){
				$colL.find('.scrollTbody').width(opts.colLW+18);
				$conM.find('.scrollTbody').width($conM.find('.fixedThead .grid').width()+18);
			}
		});
	};
	$.fn.tableFixed.defaults = {
		w:233,//模拟表格宽度
		num:10,//模拟表格最多显示数据条数
		colLW:60,//左固定列宽度
		colRW:100//右固定列宽度
	};
})(jQuery)